package br.ufpe.cin.rgms.base.publicacao.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
#if($linhaPesquisa)
import br.ufpe.cin.rgms.base.linhapesquisa.model.LinhaPesquisa;
#end
import br.ufpe.cin.rgms.base.membro.model.Membro;

@Entity
public class Publicacao implements Serializable {

	public final static String CONFERENCIA = "Artigo em Confer�ncia";
	public final static String PERIODICO = "Artigo em Peri�dicos e Revistas";
	public final static String POSGRADUACAO = "P�s-Gradua��o";

	@Id
	@GeneratedValue
	private Integer id;

	private String tipo = "";

	@ManyToMany
	@JoinTable(name = "Membro_Publicacao", joinColumns = @JoinColumn(name = "publicacao_id"), inverseJoinColumns = @JoinColumn(name = "membro_id"))
	private List<Membro> autores = new ArrayList<Membro>();

	private String autoresNaoMembros = "";

	#if($linhaPesquisa)
	@ManyToOne
	private LinhaPesquisa linhaPesquisa;
	public LinhaPesquisa getLinhaPesquisa() {
		return linhaPesquisa;
	}
	public void setLinhaPesquisa(LinhaPesquisa linhaPesquisa) {
		this.linhaPesquisa = linhaPesquisa;
	}
	#end

	// private List<String> autoresNaoMembros;

	private String titulo = "";

	private String ano = "";

	private String artigos_per = "";
	private String volume = "";
	private String numero = "";
	private String paginas_per = "";

	private String conferencia = "";
	private String paginas_conf = "";
	private String mes_conf = "";

	private String universidade = "";
	private String mesPos = "";
	private String nivel = "";

	private byte[] pdf;

	public Publicacao() {
	}

	public Publicacao(List<Membro> autores, List<String> autoresNaoMembros,
			String titulo, String ano, byte[] pdf, String tipo
			#if($linhaPesquisa)
			,LinhaPesquisa linhaPesquisa
			#end
			) {
		super();

		this.autores = autores;
		// this.setAutoresNaoMembros(autoresNaoMembros);
		this.titulo = titulo;
		this.ano = ano;
		this.pdf = pdf;
		this.tipo = tipo;
		#if($linhaPesquisa)
		this.linhaPesquisa = linhaPesquisa;
		#end
	}

	public List<Membro> getAutores() {
		return this.autores;
	}

	public void setAutores(List<Membro> autores) {
		this.autores = autores;
	}

	@Basic
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	@Basic
	public String getAno() {
		return ano;
	}

	public void setAno(String ano) {
		this.ano = ano;
	}

	//
//	CollectionOfElements
	// public List<String> getAutoresNaoMembros() {
	// return autoresNaoMembros;
	// }
	//
	// public void setAutoresNaoMembros(List<String> autoresNaoMembros) {
	// this.autoresNaoMembros = autoresNaoMembros;
	// }

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Basic
	public byte[] getPdf() {
		return pdf;
	}

	public void setPdf(byte[] pdf) {
		this.pdf = pdf;
	}

	@Basic
	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}



	public String getAutoresNaoMembros() {
		return autoresNaoMembros;
	}

	public void setAutoresNaoMembros(String autoresNaoMembros) {
		this.autoresNaoMembros = autoresNaoMembros;
	}

	public String getArtigos_per() {
		return artigos_per;
	}

	public void setArtigos_per(String artigos_per) {
		this.artigos_per = artigos_per;
	}

	public String getVolume() {
		return volume;
	}

	public void setVolume(String volume) {
		this.volume = volume;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getPaginas_per() {
		return paginas_per;
	}

	public void setPaginas_per(String paginas_per) {
		this.paginas_per = paginas_per;
	}

	public String getConferencia() {
		return conferencia;
	}

	public void setConferencia(String conferencia) {
		this.conferencia = conferencia;
	}

	public String getPaginas_conf() {
		return paginas_conf;
	}

	public void setPaginas_conf(String paginas_conf) {
		this.paginas_conf = paginas_conf;
	}

	public String getMes_conf() {
		return mes_conf;
	}

	public void setMes_conf(String mes_conf) {
		this.mes_conf = mes_conf;
	}

	public String getUniversidade() {
		return universidade;
	}

	public void setUniversidade(String universidade) {
		this.universidade = universidade;
	}

	public String getMesPos() {
		return mesPos;
	}

	public void setMesPos(String mesPos) {
		this.mesPos = mesPos;
	}
	
	public String getNivel() {
		return nivel;
	}

	public void setNivel(String nivel) {
		this.nivel = nivel;
	}	

	public String listaAutoresMembros() {
		String nomes = "";
		if (this.autores.isEmpty()) {
			nomes = null;
		} else {
			for (Membro autor : autores) {
				nomes = nomes + autor.getNome() + " " + autor.getSobrenome()
						+ ", ";
			}
			nomes = nomes.substring(0, nomes.length() - 2);
		}
		return nomes;
	}

	// public String listaAutoresNaoMembros() {
	// String nomes = "";
	// if (this.autoresNaoMembros.isEmpty()) {
	// nomes = null;
	// } else {
	// if (this.autoresNaoMembros.size() > 1) {
	// Iterator it = autoresNaoMembros.iterator();
	// while (it.hasNext()) {
	// String notMember = (String) it.next();
	// nomes = nomes + notMember + ", ";
	// }
	// nomes = nomes.substring(0, nomes.length() - 2);
	// } else {
	// nomes = this.autoresNaoMembros.get(0);
	// }
	// }
	// return nomes;
	// }

	// public String referencia() {
	// String autoresMembros = (this.listaAutoresMembros() != null) ? this
	// .listaAutoresMembros() + " " : "";
	// String autoresNaoMembros = (this.listaAutoresNaoMembros() != null) ? this
	// .listaAutoresNaoMembros() : "";
	//
	// return autoresMembros + "," + autoresNaoMembros + "."
	// + this.getTitulo() + "." + this.getAno() + ".";
	// }
}
